/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.edu.senaclem.aspera.vista;

import co.edu.senaclem.logica.AprendizLogicaLocal;
import co.edu.senaclem.logica.ReportesLogicaLocal;
import co.edu.senaclem.logica.UsuariosLogicaLocal;
import co.edu.senaclem.modelo.Aprendiz;
import java.io.IOException;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import org.primefaces.component.commandbutton.CommandButton;
import org.primefaces.component.inputtext.InputText;

/**
 *
 * @author FELIPE
 */
@ManagedBean(name = "reporteVista")
@RequestScoped
public class ReporteVista {

    @EJB
    private UsuariosLogicaLocal usuariosLogica;
    @EJB
    private ReportesLogicaLocal reportesLogica;

    @EJB
    private AprendizLogicaLocal aprendizLogica;

    private Date fechaIni;
    private Date fechaFin;
    private CommandButton btnGenerar;  //Reporte 1
    private CommandButton btnLimpiar;
    private CommandButton btnGenerar2;  //Reporte 2
    private CommandButton btnLimpiar2;
    private CommandButton btnGenerar3;  //Reporte 2
    private InputText txtDocumento;
    private InputText txtNombre;

    public Date getFechaIni() {
        return fechaIni;
    }

    public void setFechaIni(Date fechaIni) {
        this.fechaIni = fechaIni;
    }

    public Date getFechaFin() {
        return fechaFin;
    }

    public void setFechaFin(Date fechaFin) {
        this.fechaFin = fechaFin;
    }

    public CommandButton getBtnGenerar() {
        return btnGenerar;
    }

    public void setBtnGenerar(CommandButton btnGenerar) {
        this.btnGenerar = btnGenerar;
    }

    public CommandButton getBtnLimpiar() {
        return btnLimpiar;
    }

    public void setBtnLimpiar(CommandButton btnLimpiar) {
        this.btnLimpiar = btnLimpiar;
    }

    public CommandButton getBtnGenerar2() {
        return btnGenerar2;
    }

    public void setBtnGenerar2(CommandButton btnGenerar2) {
        this.btnGenerar2 = btnGenerar2;
    }

    public CommandButton getBtnLimpiar2() {
        return btnLimpiar2;
    }

    public void setBtnLimpiar2(CommandButton btnLimpiar2) {
        this.btnLimpiar2 = btnLimpiar2;
    }

    public CommandButton getBtnGenerar3() {
        return btnGenerar3;
    }

    public void setBtnGenerar3(CommandButton btnGenerar3) {
        this.btnGenerar3 = btnGenerar3;
    }

    public InputText getTxtDocumento() {
        return txtDocumento;
    }

    public void setTxtDocumento(InputText txtDocumento) {
        this.txtDocumento = txtDocumento;
    }

    public InputText getTxtNombre() {
        return txtNombre;
    }

    public void setTxtNombre(InputText txtNombre) {
        this.txtNombre = txtNombre;
    }

    public void limpiar_action() {
        //System.out.println("Limpiar");

        if (usuariosLogica.validarSesion()) {
            fechaIni = null; //se pone en null la variable date que apunta al value del calendar
            fechaFin = null; //se pone en null la variable date que apunta al value del calendar
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(CoordinadorVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }

    public void limpiar2_action() {
        //System.out.println("Limpiar2");

        if (usuariosLogica.validarSesion()) {
            txtDocumento.setValue("");
            txtNombre.setValue("");
            btnGenerar2.setDisabled(true);
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(CoordinadorVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    //listener: cuando se digita el doucmento y se hace tab consulta si el aprendiz existe y trae sus
    //campos
    public void txtDocumento_listener() {
        //System.out.println("Entro al listener");

        if (usuariosLogica.validarSesion()) {
            Aprendiz entity = null;

            try {
                Long documento = Long.parseLong(txtDocumento.getValue().toString());
                entity = aprendizLogica.consultarPorId(documento);
            } catch (Exception ex) {
                Logger.getLogger(ReporteVista.class.getName()).log(Level.SEVERE, null, ex);
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", ex.getMessage()));
            }

            //si el aprendiz no existe limpia los campos y deshabilita el boton de generar        
            if (entity == null) {
                btnGenerar2.setDisabled(true);
                txtDocumento.setValue("");
                txtNombre.setValue("");

            } else {   //si el aprendz existe llena el formulario con los datos y habilita generar

                txtNombre.setValue(entity.getDocumento().getNombre() + " " + entity.getDocumento().getApellido());
                btnGenerar2.setDisabled(false);
            }
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(CoordinadorVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }

    public void generarReporte_action() {
        if (usuariosLogica.validarSesion()) {
            try {

                FacesContext fc = FacesContext.getCurrentInstance();
                ExternalContext ec = fc.getExternalContext();
                HttpServletRequest sr = ((HttpServletRequest) ec.getRequest());
                String scheme = sr.getScheme();
                String serverName = sr.getServerName();
                int port = sr.getServerPort();
                String contextPath = sr.getContextPath();
                String url = scheme + "://" + serverName + ":" + port + contextPath;

                reportesLogica.generarReporteFechas(url, fechaIni, fechaFin);

            } catch (Exception ex) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", ex.getMessage()));
            }

        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(CoordinadorVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }

    public void generarReporte2_action() {
        if (usuariosLogica.validarSesion()) {
            try {

                FacesContext fc = FacesContext.getCurrentInstance();
                ExternalContext ec = fc.getExternalContext();
                HttpServletRequest sr = ((HttpServletRequest) ec.getRequest());
                String scheme = sr.getScheme();
                String serverName = sr.getServerName();
                int port = sr.getServerPort();
                String contextPath = sr.getContextPath();
                String url = scheme + "://" + serverName + ":" + port + contextPath;

                String documentoAprendiz = txtDocumento.getValue().toString();

                reportesLogica.generarReporteAprendiz(url, documentoAprendiz);

            } catch (Exception ex) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", ex.getMessage()));
            }
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(CoordinadorVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }

    public void generarReporte3_action() {
        if (usuariosLogica.validarSesion()) {
            try {

                FacesContext fc = FacesContext.getCurrentInstance();
                ExternalContext ec = fc.getExternalContext();
                HttpServletRequest sr = ((HttpServletRequest) ec.getRequest());
                String scheme = sr.getScheme();
                String serverName = sr.getServerName();
                int port = sr.getServerPort();
                String contextPath = sr.getContextPath();
                String url = scheme + "://" + serverName + ":" + port + contextPath;

                reportesLogica.generarReporteTotalAprendices(url);

            } catch (Exception ex) {
                Logger.getLogger(ReporteVista.class.getName()).log(Level.SEVERE, null, ex);
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", ex.getMessage()));
            }
        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(CoordinadorVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }
}
